home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Math / Integer.php < prev    next >
PHP Script  |  2004-03-24  |  5KB  |  155 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2002 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Jesus M. Castagnetto <jmcastagnetto@php.net>                |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: Integer.php,v 1.1 2003/01/02 01:55:05 jmcastagnetto Exp $
  20. //
  21.  
  22. include_once 'PEAR.php';
  23.  
  24. /** 
  25.  * The maximum integer we will accept if using the standard signed long
  26.  */
  27. define ('MATH_MAXINT', 2147483647);
  28.  
  29. // allow for user override of the integer library to use
  30. if (!defined('MATH_INTLIB')) {
  31.     if (extension_loaded('gmp')) {
  32.         define ('MATH_INTLIB', 'gmp');
  33.     } elseif (extension_loaded('bcmath')) {
  34.         define ('MATH_INTLIB', 'bcmath');
  35.         bcscale(0);
  36.     } else {
  37.         define ('MATH_INTLIB', 'std');
  38.     }
  39. }
  40.  
  41. /**
  42.  * Class to represent integers. If the GMP or BCMATH libraries are present the
  43.  * integer can be of arbitrary size, otherwise the internal PHP integer
  44.  * representation will be use (signed long). If the latter case, you cannot
  45.  * create Math_Integer objects bigger than MATH_MAXINT.
  46.  *
  47.  * @author  Jesus M. Castagnetto <jmcastagnetto@php.net>
  48.  * @version 0.8
  49.  * @access  public
  50.  * @package Math_Integer
  51.  */
  52. class Math_Integer {/*{{{*/
  53.     /**
  54.      * If the GMP library is present, this variable will contain the resource
  55.      * handle created using gmp_init(). If only the BCMATH library is present
  56.      * it will contain the string representation of the integer. If neither
  57.      * GMP or BCMATH are present, it will contain the actual integer.
  58.      * 
  59.      * @access private
  60.      * @var mixed
  61.      */
  62.     var $_value = null;
  63.  
  64.     /**
  65.      * Class constructor, accepts an optional number or string representing the integer.
  66.      *
  67.      * @param optional mixed $num an integer or its string representation
  68.      * @return Math_Integer object
  69.      * @access public
  70.      */
  71.     function Math_Integer($num=null) {/*{{{*/
  72.         if (!is_null($num)) {
  73.             $this->setValue($num);
  74.         }
  75.     }/*}}}*/
  76.  
  77.     /**
  78.      * Method to set the value for the object
  79.      * @param optional mixed $num an integer or its string representation
  80.      * @return mixed TRUE on success, a PEAR_Error otherwise
  81.      * @access public
  82.      */
  83.     function setValue($num) {/*{{{*/
  84.         if (!is_scalar($num)) {
  85.             $this->_value = null;
  86.             return PEAR::raiseError('Parameter is not a number');
  87.         }
  88.         switch (MATH_INTLIB) {
  89.             case 'gmp' :
  90.                 $this->_value = gmp_init(strval($num));
  91.                 return true;
  92.                 break;
  93.             case 'bcmath' :
  94.                 $this->_value = $num;
  95.                 return true;
  96.                 break;
  97.             case 'std' :
  98.             default :
  99.                 if ($num > MATH_MAXINT) {
  100.                     $this->_value = null;
  101.                     return PEAR::raiseError('Cannot initialize, number > MATH_MAXINT '.
  102.                                 'and no gmp or bcmath extensions detected');
  103.                 } else {
  104.                     $this->_value = intval($num);
  105.                     return true;
  106.                 }
  107.                 break;
  108.         }
  109.     }/*}}}*/
  110.  
  111.     /**
  112.      * Returns the content of $this->_value
  113.      *
  114.      * @return mixed the value on success, a PEAR_Error otherwise
  115.      * @access public
  116.      */
  117.     function getValue() {/*{{{*/
  118.         if (!$this->initialized()) {
  119.             return PEAR::raiseError('Math_Integer object not initialized');
  120.         }
  121.         return $this->_value;
  122.     }/*}}}*/
  123.  
  124.     /**
  125.      * Returns a string representation of the value
  126.      *
  127.      * @return mixed a string on success, a PEAR_Error otherwise
  128.      * @access public
  129.      */
  130.     function toString() {/*{{{*/
  131.         if (!$this->initialized()) {
  132.             return PEAR::raiseError('Math_Integer object not initialized');
  133.         }
  134.         if (MATH_INTLIB == 'gmp') {
  135.             return gmp_strval($this->_value);
  136.         } else { // for 'std' and 'bcmath'
  137.             return (string) $this->_value;
  138.         }
  139.     }/*}}}*/
  140.  
  141.     /**
  142.      * Checks if the object has been succesfully initialized
  143.      *
  144.      * @return boolean TRUE if initialized, FALSE otherwise
  145.      * @access public
  146.      */
  147.     function initialized() {/*{{{*/
  148.         return !is_null($this->_value);
  149.     }/*}}}*/
  150. }/*}}} end of Math_Integer */
  151.  
  152. // vim: ts=4:sw=4:et:
  153. // vim6: fdl=1:
  154. ?>
  155.